package leetcode_day._2021._202105._0110;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/5/2 10:24
 * 砖墙
 * 算法：哈希表
 * 要求穿过最少砖块的垂线，
 * 反过来理解就是求穿过砖块边缘最多的垂线
 * 利用散列表来存储，key 为宽度，value 为宽度是 key 的砖块边缘数
 * 最后遍历散列表，求边缘数最多的
 */
public class _02_554 {

    public int leastBricks(List<List<Integer>> wall) {
        Map<Integer, Integer> map = new HashMap<>();
        for (List<Integer> list : wall) {
            int sum = 0;
            for (int i = 0; i < list.size() - 1; i++) {
                sum += list.get(i);
                map.put(sum, map.getOrDefault(sum, 0) + 1);
            }
        }
        int max = 0;
        for (Map.Entry<Integer, Integer> entry : map.entrySet())
            max = entry.getValue() > max ? entry.getValue() : max;
        return wall.size() - max;
    }
}
